import 'dart:convert';
import 'dart:io';
import 'package:crypto/crypto.dart';

class MD5Utils {
  MD5Utils._();

  /// MD5加密(多次)
  static String getMD5Times(String input, int times) {
    if (input.isEmpty) return "";

    String md5 = input;
    for (var i = 0; i < times; i++) {
      md5 = getMD5(md5);
    }
    return md5;
  }

  /// MD5加密(加盐)
  ///
  /// @param string 加密字符串
  /// @param slat   加密盐值key
  /// @return 加密结果字符串
  static String getMD5(String data, {String slat = '', bool uppercase = true}) {
    if (data.isEmpty) return '';
    // 将字符串转换为 UTF-8 字节列表
    List<int> bytes = utf8.encode(data + slat);
    // 生成 MD5 摘要
    Digest digest = md5.convert(bytes);
    // 返回十六进制字符串
    String hexStr = digest.toString();
    return uppercase ? hexStr.toUpperCase() : hexStr;
  }
}

void main() async {
  print(await MD5Utils.getMD5("ddddddddd123"));
}
